home *** CD-ROM | disk | FTP | other *** search
- unit ddfossil;
- {$S-,V-,R-}
-
- interface
- uses dos;
-
- const
- name='Fossil drivers for TP 4.0';
- author='Scott Baker';
- type
- fossildatatype = record
- strsize: word;
- majver: byte;
- minver: byte;
- ident: pointer;
- ibufr: word;
- ifree: word;
- obufr: word;
- ofree: word;
- swidth: byte;
- sheight: byte;
- baud: byte;
- end;
- var
- port_num: integer;
- fossildata: fossildatatype;
-
- procedure async_send(ch: char);
- procedure async_send_string(s: string);
- function async_receive(var ch: char): boolean;
- function async_carrier_drop: boolean;
- function async_carrier_present: boolean;
- function async_buffer_check: boolean;
- function async_init_fossil: boolean;
- procedure async_deinit_fossil;
- procedure async_flush_output;
- procedure async_purge_output;
- procedure async_purge_input;
- procedure async_set_dtr(state: boolean);
- procedure async_watchdog_on;
- procedure async_watchdog_off;
- procedure async_warm_reboot;
- procedure async_cold_reboot;
- procedure async_Set_baud(n: integer);
- procedure async_set_flow(SoftTran,Hard,SoftRecv: boolean);
- procedure Async_Buffer_Status(var Insize,Infree,OutSize,Outfree: word);
-
- implementation
-
- procedure async_send(ch: char);
- var
- regs: registers;
- begin;
- regs.al:=ord(ch);
- regs.dx:=port_num;
- regs.ah:=1;
- intr($14,regs);
- end;
-
- procedure async_send_string(s: string);
- var
- a: integer;
- begin;
- for a:=1 to length(s) do async_send(s[a]);
- end;
-
- function async_receive(var ch: char): boolean;
- var
- regs: registers;
- begin;
- ch:=#0;
- regs.ah:=3;
- regs.dx:=port_num;
- intr($14,regs);
- if (regs.ah and 1)=1 then begin;
- regs.ah:=2;
- regs.dx:=port_num;
- intr($14,regs);
- ch:=chr(regs.al);
- async_receive:=true;
- end else async_receive:=false;
- end;
-
- function async_carrier_drop: boolean;
- var
- regs: registers;
- begin;
- regs.ah:=3;
- regs.dx:=port_num;
- intr($14,regs);
- if (regs.al and $80)<>0 then async_carrier_drop:=false else async_carrier_drop:=true;
- end;
-
- function async_carrier_present: boolean;
- var
- regs: registers;
- begin;
- regs.ah:=3;
- regs.dx:=port_num;
- intr($14,regs);
- if (regs.al and $80)<>0 then async_carrier_present:=true else async_carrier_present:=false;
- end;
-
- function async_buffer_check: boolean;
- var
- regs: registers;
- begin;
- regs.ah:=3;
- regs.dx:=port_num;
- intr($14,regs);
- if (regs.ah and 1)=1 then async_buffer_check:=true else async_buffer_check:=false;
- end;
-
- function async_init_fossil: boolean;
- var
- regs: registers;
- begin;
- regs.ah:=4;
- regs.bx:=0;
- regs.dx:=port_num;
- intr($14,regs);
- if regs.ax=$1954 then async_init_fossil:=true else async_init_fossil:=false;
- end;
-
- procedure async_deinit_fossil;
- var
- regs: registers;
- begin;
- regs.ah:=5;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_set_dtr(state: boolean);
- var
- regs: registers;
- begin;
- regs.ah:=6;
- if state then regs.al:=1 else regs.al:=0;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_flush_output;
- var
- regs: registers;
- begin;
- regs.ah:=8;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_purge_output;
- var
- regs: registers;
- begin;
- regs.ah:=9;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_purge_input;
- var
- regs: registers;
- begin;
- regs.ah:=$0a;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_watchdog_on;
- var
- regs: registers;
- begin;
- regs.ah:=$14;
- regs.al:=01;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_watchdog_off;
- var
- regs: registers;
- begin;
- regs.ah:=$14;
- regs.al:=00;
- regs.dx:=port_num;
- intr($14,regs);
- end;
-
- procedure async_warm_reboot;
- var
- regs: registers;
- begin;
- regs.ah:=$17;
- regs.al:=01;
- intr($14,regs);
- end;
-
- procedure async_cold_reboot;
- var
- regs: registers;
- begin;
- regs.ah:=$17;
- regs.al:=00;
- intr($14,regs);
- end;
-
- procedure async_set_baud(n: integer);
- var
- regs: registers;
- begin;
- regs.ah:=00;
- regs.al:=3;
- regs.dx:=port_num;
- case n of
- 300: regs.al:=regs.al or $40;
- 1200: regs.al:=regs.al or $80;
- 2400: regs.al:=regs.al or $A0;
- 4800: regs.al:=regs.al or $C0;
- 9600: regs.al:=regs.al or $E0;
- 19200: regs.al:=regs.al or $00;
- end;
- intr($14,regs);
- end;
-
- procedure async_set_flow(SoftTran,Hard,SoftRecv: boolean);
- var
- regs: registers;
- begin;
- regs.ah:=$0F;
- regs.al:=00;
- if softtran then regs.al:=regs.al or $01;
- if Hard then regs.al:=regs.al or $02;
- if SoftRecv then regs.al:=regs.al or $08;
- regs.al:=regs.al or $F0;
- Intr($14,regs);
- end;
-
- procedure async_get_fossil_data;
- var
- regs: registers;
- begin;
- regs.ah:=$1B;
- regs.cx:=sizeof(fossildata);
- regs.dx:=port_num;
- regs.es:=seg(fossildata);
- regs.di:=ofs(fossildata);
- intr($14,regs);
- end;
-
- procedure Async_Buffer_Status(var Insize,Infree,OutSize,Outfree: word);
- begin;
- async_get_fossil_data;
- insize:=fossildata.ibufr;
- infree:=fossildata.ifree;
- outsize:=fossildata.obufr;
- outfree:=fossildata.ofree;
- end;
-
- end.